package com.shop.loan.util.pdf;

import com.itextpdf.awt.geom.Rectangle2D;
import com.itextpdf.text.pdf.parser.ImageRenderInfo;
import com.itextpdf.text.pdf.parser.RenderListener;
import com.itextpdf.text.pdf.parser.TextRenderInfo;
import lombok.Data;

import java.util.ArrayList;
import java.util.List;

/**
 * PDF处理监听程序，主要用于文本处理
 * Author：
 * Date：2022-08-25 00:56
 */
@Data
public class PdfRenderListener implements RenderListener {
    /**
     * 文本块信息列表
     */
    private List<TextChunkRenderInfo> textChunkRenderInfoList = new ArrayList<>();

    /**
     * 文本块处理开始
     */
    @Override
    public void beginTextBlock() {
    }

    /**
     * 文本小块处理
     *
     * @param textRenderInfo 文本信息处理，此处包含一个文本块，该文本块内包含一个字符或多个字符
     */
    @Override
    public void renderText(TextRenderInfo textRenderInfo) {
        // 获取文本内容
        String text = textRenderInfo.getText();
        if (text != null) {
            // 获取文本矩形信息
            Rectangle2D.Float rectAscent = textRenderInfo.getAscentLine().getBoundingRectange();
            // 计算文字的边框矩形
            float minX = (float) rectAscent.getMinX(); // 文本行最左侧
            float minY = (float) rectAscent.getMinY() - 1; // 文本行最下方
            float maxX = (float) rectAscent.getMaxX(); // 文本最右侧
            float maxY = (float) rectAscent.getMaxY() + 1; // 文本最上方
            TextChunkRenderInfo textChunkRenderInfo = new TextChunkRenderInfo(text, minX, minY, maxX, maxY);
            this.textChunkRenderInfoList.add(textChunkRenderInfo);
        }
    }

    /**
     * 文本块处理结束
     */
    @Override
    public void endTextBlock() {
    }

    /**
     * 图片处理
     *
     * @param imageRenderInfo 图片预处理信息
     */
    @Override
    public void renderImage(ImageRenderInfo imageRenderInfo) {
    }
}